var http = require('http');
var net = require('net');
var url = require('url');

/**
 **HTTP 客户端通过 CONNECT 方法请求隧道代理创建一条到达任意目的服务器和端口的 TCP 连接，
 **并对客户端和服务器之间的后继数据进行盲转发
 **建立隧道需要耗费一次往返，能不用就尽量不用
 **/

function connect(cReq, cSock) {
	var u = url.parse('http://' + cReq.url);
	var pSock = net.connect(u.port, u.hostname, function() {
		cSock.write('HTTP/1.1 200 Connection Established\r\n\r\n');
		pSock.pipe(cSock);
	}).on('error', function(e) {
		cSock.end();
	});
	cSock.pipe(pSock);
}

http.createServer().on('connect', connect).listen(8888, '0.0.0.0');